package com.nifostasky.mqcallback.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;

/**
 * ## 消息的可靠投递
 * 交换机 -> 队列
 * 发生异常时的消息返回提醒
 *
 * 这里使用的mq依赖版本较低;高版本使用 `ReturnsCallback` 接口
 *
 */
@Slf4j
public class RabbitReturnCallback implements RabbitTemplate.ReturnCallback {


    /**
     * 回调方法
     * 仅当 交换机 分发消息到-> 队列 时失败才调用此方法
     * @param message 返回消息回调
     * @param replyCode 应答代码
     * @param replyText 回复文本
     * @param exchange 交换器
     * @param routingKey 路由键
     */
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        log.info("返回消息回调: {}",message);
        log.info("应答代码: {}",replyCode);
        log.info("回复文本: {}",replyText);
        log.info("交换器: {}",exchange);
        log.info("路由键: {}",routingKey);
    }

//    /**
//     * 高版本覆写这个方法;  实现接口改为 `ReturnsCallback` ;
//     * @param returned
//     */
//    @Override
//    public void returnedMessage(ReturnedMessage returned) {
//        log.info("消息主体: {}", returned.getMessage());
//        log.info("回复编码: {}", returned.getReplyCode());
//        log.info("回复内容: {}", returned.getReplyText());
//        log.info("交换器: {}", returned.getExchange());
//        log.info("路由键: {}", returned.getRoutingKey());
//    }
}
